An embodiment of the invention described below is related to accessing software-accessible registers that are used to configure the functions of a computer system, including one or more of its integrated circuit components.
A computer system is composed of several primary integrated circuit (IC) components, typically including a processor such as a PENTIUM processor by Intel Corp., Santa Clara, Calif., and a main memory. In many cases, a system interface component (also referred to as a system chipset) is also used, to allow the processor to communicate with a broad range of other IC components and peripherals, such as a graphics subsystem, a network interface controller, and a mass storage device. Each IC component is designed to implement certain functions that work together to help the system achieve its overall purpose.
Of the primary IC components described above, the system chipset may have the most number of different functions to support. That is because the system chipset in many cases acts as a communications bridge between not only the processor and other IC components, but sometimes also between the peripherals and main memory. To use IC manufacturing resources more efficiently, a single system chipset is often designed to be flexible enough to support different types of processor, memory, and peripheral combinations. This flexibility is achieved by designing the system chipset with configurable, internal hardware whose configuration and functionality is set according to the contents of a number of internal, software-accessible registers (also referred to as configuration registers). After applying power to a given computer system, the configuration registers in the system chipset (and also those in other primary IC components such as the processor and memory) are written with their desired values, typically under the control of an operating system program.
In the case of the 82443BX host bridge/controller chipset by Intel Corp., the programming of a configuration register (also referred to as programming in configuration space) may be as follows. There are two control registers that are accessible from the host/central processing unit (CPU) I/O address space, namely a Configuration Address Register (CONFADD, also referred to by its hex address CF8) and a Configuration Data Register (CONFDATA, also referred to by its hex address CFC). Access to any of the configuration registers is by first accessing the CONFADD and identifying the selected register (by appropriately writing to the CONFADD to “point” to the selected register). Next, an access is performed to the CONFDATA which contains the current value of the selected register, to write a new value. The selected register will then be updated accordingly. To program another configuration register, the same dual access operation is repeated to first point to the next register (by writing to the CONFADD), and then request an update to it (by writing the new value to the CONFDATA).